package com.leetcode.蓝桥杯.十一届国赛;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

/**
 * 100!(100的阶乘)有多少个正约数
 * 
 * 根据约数个数定理的原理：一个数的约数由它的所有质数（素数）因子(1不是质数)，搭配而来。
 * 比如说：12的约数中，有两个质数因子：2和3。12可以写成12=2^2 + 3^1。
 * 也就是说，根据定理，因子2的个数可以选择（0,1,2），因子3可以选择(0,1)，那么总共的搭配就有6种，那么12的约数个数就有6种。
 * 
 * @author LZF
 *
 */
public class 填空题3 {
	public static void main(String[] args) {
		long ans = 1;
		int[] arr = new int[110];
		for (int i = 2; i <= 100; i++) {
			if (isPrime(i))
				arr[i]++;
			else {//如果i不是质数，那么它肯定可以表示为几个质数的乘积，求出这些质数
				int tmp = i;
				int j = 2;//最小的质数为2
				while (tmp != 1) {
					if (isPrime(j)) {
						while (tmp % j == 0) {
							arr[j]++;//质数j的个数加1
							tmp /= j;
						}
					}
					j++;
				}
			}
		}
		for (int i = 2; i < 110; i++) {
			if (arr[i] > 0) {
				ans *= (arr[i] + 1);//arr[i]表示因子i有arr[i]个，那么这个因子有（arr[i] + 1)种选择
			}
		}
		System.out.println(ans);
	}

	public static boolean isPrime(int x) {
		if (x == 1)
			return false;
		for (int i = 2; i * i <= x; i++) {
			if (x % i == 0)
				return false;
		}
		return true;

	}
}
